﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace T68Control.T68
{
    /// <summary>
    /// 文件操作结果
    /// </summary>
    public class FileOperationResult
    {
        public int CopiedToFirstLocation { get; set; }
        public int CopiedToSecondLocation { get; set; }
        public int DeletedFiles { get; set; }
        public int Errors { get; set; }
        public bool HasScanError { get; set; }

        public override string ToString()
        {
            return $"拷贝到位置1: {CopiedToFirstLocation} 个, " +
                   $"拷贝到位置2: {CopiedToSecondLocation} 个, " +
                   $"删除源文件: {DeletedFiles} 个, " +
                   $"错误数: {Errors} 个" +
                   (HasScanError ? " (包含扫描错误)" : "");
        }
    }

    public class EnhancedFileCopyService
    {
        /// <summary>
        /// 拷贝文件到两个目录并删除源文件
        /// </summary>
        /// <param name="sourceRoot">源目录根路径</param>
        /// <param name="targetRoot1">第一个目标目录根路径</param>
        /// <param name="targetRoot2">第二个目标目录根路径</param>
        /// <param name="timeThreshold">时间阈值</param>
        /// <param name="filePattern">文件匹配模式</param>
        /// <returns>操作结果对象</returns>
        public static FileOperationResult CopyToTwoLocationsAndDelete(
            string sourceRoot,
            DateTime timeThreshold,
            string filePattern = "*.jpg")
        {
            var result = new FileOperationResult();

            try
            {
                // 获取所有符合条件的文件
                var files = Directory.GetFiles(sourceRoot, filePattern, SearchOption.AllDirectories)
                    .Where(f => File.GetCreationTime(f) <= timeThreshold)
                    .ToList();

                string targetRoot1 = sourceRoot.ToLower().Replace("d:", "e:");
                string targetRoot2 = targetRoot1 + "\backup";

                foreach (var sourceFile in files)
                {
                    try
                    {
                        // 计算相对路径
                        string relativePath = sourceFile.Substring(sourceRoot.Length).TrimStart('\\');

                        // 第一个目标位置
                        string targetFile1 = Path.Combine(targetRoot1, relativePath);
                        if (CopySingleFile(sourceFile, targetFile1))
                        {
                            result.CopiedToFirstLocation++;
                        }

                        // 第二个目标位置
                        string targetFile2 = Path.Combine(targetRoot2, relativePath);
                        if (CopySingleFile(sourceFile, targetFile2))
                        {
                            result.CopiedToSecondLocation++;
                        }

                        // 如果两个位置都拷贝成功，则删除源文件
                        if (File.Exists(targetFile1) && File.Exists(targetFile2))
                        {
                            File.Delete(sourceFile);
                            result.DeletedFiles++;
                            Console.WriteLine($"已删除源文件: {sourceFile}");
                        }
                    }
                    catch (Exception ex)
                    {
                        result.Errors++;
                        Console.WriteLine($"处理文件 {sourceFile} 时出错: {ex.Message}");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"扫描目录时出错: {ex.Message}");
                result.HasScanError = true;
            }

            Console.WriteLine($"操作完成: {result}");
            return result;
        }

        private static bool CopySingleFile(string sourceFile, string targetFile)
        {
            try
            {
                string targetDir = Path.GetDirectoryName(targetFile);

                // 创建目标目录（如果不存在）
                if (!Directory.Exists(targetDir))
                {
                    Directory.CreateDirectory(targetDir);
                    Console.WriteLine($"创建目录: {targetDir}");
                }

                // 拷贝文件（覆盖已存在的文件）
                File.Copy(sourceFile, targetFile, true);
                Console.WriteLine($"已拷贝: {sourceFile} -> {targetFile}");
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"拷贝到 {targetFile} 失败: {ex.Message}");
                return false;
            }
        }
    }
}